The need to store digital files, documents, pictures, images and other data continues to increase rapidly. In connection with the electronic storage of data, systems incorporating one or more data storage controllers have been devised. Storage controllers receive data read and write requests from host computers and control one or more physical storage devices to beneficially store or provide the requested data from/to the host computers.
Storage controllers generally buffer read and write data requests, often converting the host data read and write requests into RAID or storage device read or write requests. Many storage controllers store read and write data in cache memories included as part of the storage controllers. Cache memories are small compared to external storage devices such as hard drives, and generally orders of magnitude faster. However, cache memory costs significantly more per byte than storage devices, and therefore cache memory size is correspondingly small in order to be cost effective. The need is always present for cache memories to operate as efficiently as possible in order for overall storage controller performance to be maximized to all interconnected host computers.
Many storage controllers have separate areas of memory dedicated to read cache and write cache. If requested data is in the read cache when a host computer requests the data that is a “cache hit”. If requested data is not in the read cache when a host computer requests the data that is a “cache miss”. Storage controllers execute caching policies to attempt to maximize the likelihood that requested data will be present in a read cache when the data is requested by a host computer. One of the most common such policies is LRU or “least recently used”. LRU policies maintain a log of which data has been present in the read cache for the longest time, and replace that oldest data with newer data that has either been requested by a host read request or in spatial proximity to previous host read requests.